package org.example.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.example.mapper.TaskMapper;
import org.example.pojo.Task;
import org.example.service.TaskService;
import org.example.utils.PageBean;
import org.example.utils.R;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.util.Comparator;
import java.util.List;
/**
 * @Description: 实现类
 * @Author:曹震
 * @Date: 2024/11/27 11:58
 */
@Service
public class TaskServiceImpl implements TaskService {
    @Resource
    private TaskMapper mapper;
    @Override
    public R findTask(int currentPage, int pageSize) {
        // 清理分页信息（可以解除注释，如果你有多个分页查询）
        // PageHelper.clearPage();

        // 启动分页
        PageHelper.startPage(currentPage, pageSize);

        // 查询并排序，最好将排序逻辑移至 SQL 查询阶段
        List<Task> tasks = mapper.findTask();

        // 如果没有数据，返回空结果
        if (tasks.isEmpty()) {
            return R.empty("数据为空", null);
        }

        // 如果排序必须在内存中进行（如果不在SQL中排序），则继续排序


        // 获取分页信息
        PageInfo<Task> taskPageInfo = new PageInfo<>(tasks);

        // 创建分页结果
        PageBean<Task> taskPageBean = new PageBean<>(
                currentPage,
                pageSize,
                taskPageInfo.getTotal(),
                taskPageInfo.getList()
        );

        // 返回成功结果
        return R.successful("查询成功", taskPageBean);
    }

    @Override
    public R passTask(Integer taskId) {
        int pass = mapper.pass(taskId);
        if (pass>=1){
            return R.successful("审核通过", null);
        }else{
            return R.error("数据不存在",null);
        }

    }
    @Override
    public R listTask(int currentPage, int pageSize, String requesterName,Integer taskStatus, Integer taskCategory,
                      LocalDate createdAtStart, LocalDate createdAtEnd) {

        // 启动分页插件，正确顺序
        PageHelper.startPage(currentPage, pageSize);
        // 查询数据库，分页插件会自动处理 LIMIT 和 OFFSET
        List<Task> tasks = mapper.listAllTask(requesterName,taskStatus, taskCategory, createdAtStart, createdAtEnd);

        if (tasks == null || tasks.isEmpty()) {
            return R.empty("数据为空", null);
        }

        // 排序分页后的数据，处理 null 值
        tasks.sort(Comparator.comparing(Task::getCreatedAt, Comparator.nullsLast(Comparator.naturalOrder())));

        // 构造分页信息
        PageInfo<Task> taskPageInfo = new PageInfo<>(tasks);
        PageBean<Task> taskPageBean = new PageBean<>(
                currentPage,
                pageSize,
                taskPageInfo.getTotal(),
                taskPageInfo.getList()
        );

        // 返回成功响应
        return R.successful("查询成功", taskPageBean);
    }




    @Override
    public R refuseTask(Integer taskId, String objection) {
        int i = mapper.refuseTaskByTaskId(taskId, objection);
        if (i<=0){
            return R.error("审核错误", null);
        }else {
            return R.successful("审核不通过", objection);
        }
    }


}
